// core/init_redis.go
// =============================================================================
// | 包: core                                                                 |
// | 模块: 初始化组件                                                          |
// | 功能: 提供Redis数据库连接初始化功能                                       |
// =============================================================================
package core

import (
	"blog_server/global"      // 全局配置包 - 提供全局配置和变量访问

	"github.com/go-redis/redis" // Redis客户端库 - 提供Redis操作功能
	"github.com/sirupsen/logrus" // 日志库 - 提供结构化日志记录
)

// =============================================================================
// | 函数: InitRedis                                                          |
// | 参数: 无                                                                 |
// | 返回: @*redis.Client - Redis客户端实例                                    |
// | 功能: 初始化Redis数据库连接                                              |
// | 说明: 根据全局配置创建Redis客户端，验证连接并返回                        |
// |----------------------------------------------------------------------------|
// | 流程:                                                                     |
// | 1. 获取全局Redis配置                                                      |
// | 2. 创建Redis客户端实例                                                   |
// | 3. 发送PING命令验证连接                                                  |
// | 4. 连接失败时记录错误并终止程序                                          |
// | 5. 连接成功时记录日志并返回客户端实例                                    |
// =============================================================================
func InitRedis() *redis.Client {
	// 获取全局配置中的Redis配置信息
	r := global.Config.Redis
	
	// 创建Redis客户端实例
	redisDB := redis.NewClient(&redis.Options{
		Addr:     r.Addr,     // Redis服务器地址和端口
		Password: r.Password, // Redis连接密码
		DB:       r.DB,       // Redis数据库索引
	})

	// 发送PING命令验证连接
	_, err := redisDB.Ping().Result()
	if err != nil {
		// 连接失败时记录错误日志并终止程序
		logrus.Fatalf("redis连接失败 %s", err)
		panic(err)
	}
	
	// 连接成功时记录日志
	logrus.Info("redis连接成功")
	return redisDB // 返回初始化成功的Redis客户端实例
}
